﻿//==========================================================
//Đã sửa bởi tranninh_86_yb@yahoo.com ngày 25/06/2013
//==========================================================

using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;

using DevExpress.XtraEditors;
using DevExpress.XtraGrid;

using prjKQXS_UI.View;
using prjKQXS_DLL.Dal;
using prjKQXS_UI.Reports;
using prjKQXS_DLL;
using prjKQXS_DLL.Danh_muc;

namespace prjKQXS_UI.Danh_muc
{
    public partial class frmDMDLTC : DevExpress.XtraEditors.XtraForm
    {
        int cap;
        #region form EVENT ========================================================================
        public frmDMDLTC(int cap)
        {
            InitializeComponent();
            this.cap = cap;

            if (cap == 1)
            {
                gcolMaDL.Visible = false;
            }
        }

        private void frmDMDAILY_Load(object sender, EventArgs e)
        {
            if (cap == 1)
            {
                loadLueChucVu();    //Nạp dữ liệu cho lueChucVu

                //if (BienTc.isQuanHuyen)
                //{
                //    gvDonVi.Columns["isBanRong"].Visible = false;
                //}
            }
            else sbtnIn.Visible = false;

            load_gcDonVi_DataSource();
        }

        private void frmDMDLTC_Shown(object sender, EventArgs e)
        {
            if (cap == 1)
            {
                this.Text = "DANH MỤC ĐẠI LÝ THẾ CHẤP CẤP I";
                lblTitle.Text = "DANH MỤC ĐẠI LÝ THẾ CHẤP CẤP I";
            }
            else
            {
                this.Text = "DANH MỤC ĐẠI LÝ THẾ CHẤP CẤP II";
                lblTitle.Text = "DANH MỤC ĐẠI LÝ THẾ CHẤP CẤP II";
            }
        }

        private void frmDanhMucDLTCCap1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (frmMain.sEdittingFormName.Contains(this.Name))
            {
                string msg = "Bạn đang thực hiện thêm mới hoặc chỉnh sửa nhưng dữ liệu chưa được lưu.\n" +
                    "Bạn vẫn muốn thoát khỏi?";
                if (MessageBox.Show(msg, "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                {
                    e.Cancel = true;
                }
                else
                {
                    gvDonVi.CancelUpdateCurrentRow();
                    frmMain.sEdittingFormName = frmMain.sEdittingFormName.Replace(this.Name, "");
                    this.Close();
                }
            }
        }
        #endregion ================================================================================


        #region Các nút lệnh ======================================================================
        private void sbtnRefresh_Click(object sender, EventArgs e)
        {
            load_gcDonVi_DataSource();
        }

        private void sbtnSua_CheckedChanged(object sender, EventArgs e)
        {
            if (cbtnSua.Checked)
            {
                cbtnSua.Text = "Khóa";
            }
            else
            {
                chkKhoiPhuc.Checked = false;
                cbtnSua.Text = "Sửa";
                load_gcDonVi_DataSource();
            }

            if (gvDonVi.GetDataRow(GridControl.NewItemRowHandle) != null) //Nếu có dòng đang thêm mới trong gvDonVi
            {
                load_gcDonVi_DataSource();
            }

            sbtnXoa.Enabled = cbtnSua.Checked;
            gvDonVi_DataSourceChanged(sender, e);
            chkKhoiPhuc.Enabled = cbtnSua.Checked;
            gvDonVi.OptionsBehavior.Editable = cbtnSua.Checked;

            gvDonVi_FocusedRowChanged(sender, null);
        }

        private void sbtnXoa_Click(object sender, EventArgs e)
        {
            clsDMDLTC tc = new clsDMDLTC(cap);
            tc.OnAction += new clsDMDLTC.OnActionHandler(tc_OnAction);
            tc.OnError += new clsDMDLTC.OnErrorHandler(tc_OnError);

            if (chkKhoiPhuc.Checked)
            {
                if (gcDonVi.DataSource != null && ((DataTable)gcDonVi.DataSource).Rows.Count > 0)
                {
                    string s = "Ở chế độ khôi phục BẢNG LÃI CHI TIẾT của đại lý sẽ bị xóa hoàn toàn khỏi hệ thống, bạn có chắc chắn xóa?";
                    if (clsCommon.MsgBox(s, 2) == System.Windows.Forms.DialogResult.Yes)
                    {
                        tc.Delete((int)gvDonVi.GetFocusedDataRow()["ID"], false);
                    }
                }
            }
            else
            {
                if (gcDonVi.DataSource != null && ((DataTable)gcDonVi.DataSource).Rows.Count > 0)
                {
                    string msg = "Bạn có chắc chắn muốn xóa BẢNG LÃI CHI TIẾT của đại lý này?";
                    if (clsCommon.MsgBox(msg, 2) == System.Windows.Forms.DialogResult.Yes)
                    {
                        tc.Delete((int)gvDonVi.GetFocusedDataRow()["ID"], true);
                    }
                }
            }
            load_gcDonVi_DataSource();
        }

        //Nạp dữ liệu và mở báo cáo rpt_DSDaiLyCap1
        private void sbtnIn_Click(object sender, EventArgs e)
        {
            if (cap == 1)
            {
                prjKQXS_Report.rpt_DSDaiLyCap1.View();
            }
            else
            {

            }
        }

        private void sbtnLoc_Click(object sender, EventArgs e)
        {
            if (sbtnLoc.Tag.Equals("LOC"))
            {
                sbtnLoc.Tag = "BL";
                sbtnLoc.Text = "&Bỏ lọc";
                gvDonVi.OptionsView.ShowAutoFilterRow = true;
            }
            else
            {
                gvDonVi.OptionsView.ShowAutoFilterRow = false;
                sbtnLoc.Tag = "LOC";
                sbtnLoc.Text = "&Lọc";
                gvDonVi.ClearColumnsFilter();
            }
        }

        private void sbtnKhoiPhuc_Click(object sender, EventArgs e)
        {
            string s = "Bạn có chắc chắn muốn khôi phục dòng này?";
            if (XtraMessageBox.Show(s, "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes)
            {
                clsDMDLTC tc = new clsDMDLTC(cap);
                tc.OnAction += new clsDMDLTC.OnActionHandler(tc_OnAction);
                tc.OnError += new clsDMDLTC.OnErrorHandler(tc_OnError);

                tc.Restore((int)gvDonVi.GetFocusedDataRow()["ID"]);
                load_gcDonVi_DataSource();
            }
        }

        private void sbtnDong_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        #endregion ================================================================================


        #region gvDonvi ===========================================================================
        private void gvDonVi_DataSourceChanged(object sender, EventArgs e)
        {
            lblSoLuong.Text = gvDonVi.RowCount.ToString();

            if (gvDonVi.RowCount == 0)
            {
                sbtnXoa.Enabled = false;
                sbtnIn.Enabled = false;

                if (cbtnSua.Checked) chkKhoiPhuc.Enabled = true;
                sbtnKhoiPhuc.Enabled = false;
            }
            else
            {
                gvDonVi.ClearColumnErrors();
                if (cbtnSua.Checked) sbtnXoa.Enabled = true;
                sbtnKhoiPhuc.Enabled = chkKhoiPhuc.Checked;
                sbtnIn.Enabled = !chkKhoiPhuc.Checked;

                gvDonVi_FocusedRowChanged(sender, null);
            }
        }

        private void gvDonVi_ColumnFilterChanged(object sender, EventArgs e)
        {
            lblSoLuong.Text = gvDonVi.RowCount.ToString();
        }

        private void gvDonVi_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            //Nếu cột "Ngày nộp TC" trống => Không cho sửa ở các cột Số phiếu thu, TLCT, Ngày rút TC, KT và khóa nút xóa
            if (gvDonVi.GetFocusedRowCellValue(gcolNgayNopTC) == DBNull.Value)
            {
                gcolSoPhieuThu.OptionsColumn.AllowEdit = false;
                gcolSoPhieuThu.AppearanceHeader.ForeColor = frmMain.lockColor;

                gcolNgayRutTC.OptionsColumn.AllowEdit = false;
                gcolNgayRutTC.AppearanceHeader.ForeColor = frmMain.lockColor;

                gcolKT.OptionsColumn.AllowEdit = false;
                gcolKT.AppearanceHeader.ForeColor = frmMain.lockColor;
            }
            else
            {
                gcolSoPhieuThu.OptionsColumn.AllowEdit = cbtnSua.Checked;
                gcolSoPhieuThu.AppearanceHeader.ForeColor = frmMain.unLockColor;

                if (gvDonVi.GetFocusedRowCellValue(gcolNgayTLKyTiep) == DBNull.Value)
                {
                    gcolTLCT.OptionsColumn.AllowEdit = false;
                    gcolTLCT.AppearanceHeader.ForeColor = frmMain.lockColor;
                }
                else
                {
                    gcolTLCT.OptionsColumn.AllowEdit = cbtnSua.Checked;
                    gcolTLCT.AppearanceHeader.ForeColor = frmMain.unLockColor;
                }

                //Nếu "Ngày t.lý" rỗng => không cho sửa ở cột Ngày rút TC, KT
                if (gvDonVi.GetFocusedRowCellValue(gcolNgayThanhLy) == DBNull.Value)
                {
                    gcolNgayRutTC.OptionsColumn.AllowEdit = false;
                    gcolNgayRutTC.AppearanceHeader.ForeColor = frmMain.lockColor;

                    gcolKT.OptionsColumn.AllowEdit = false;
                    gcolKT.AppearanceHeader.ForeColor = frmMain.lockColor;
                }
                else
                {
                    gcolNgayRutTC.OptionsColumn.AllowEdit = cbtnSua.Checked;
                    gcolNgayRutTC.AppearanceHeader.ForeColor = frmMain.unLockColor;

                    //Nếu "Ngày rút TC" rỗng => không cho sửa cột KT
                    if (gvDonVi.GetFocusedRowCellValue(gcolNgayRutTC) == DBNull.Value)
                    {
                        gcolKT.OptionsColumn.AllowEdit = false;
                        gcolKT.AppearanceHeader.ForeColor = frmMain.lockColor;
                    }
                    else
                    {
                        gcolKT.OptionsColumn.AllowEdit = cbtnSua.Checked;
                        gcolKT.AppearanceHeader.ForeColor = frmMain.unLockColor;
                    }
                }
            }
        }

        private void gvDonVi_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
        {
            frmMain.sEdittingFormName = frmMain.sEdittingFormName.Replace(this.Name, "");
            frmMain.sEdittingFormName += this.Name;

            e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.NoAction;
        }

        private void gvDonVi_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            DataRow dr = gvDonVi.GetDataRow(e.RowHandle);
            if (dr != null)
            {
                e.Valid = RecordIsOK(dr);

                if (e.Valid) // Nếu dữ liệu nhập vào hợp lệ thì thực hiện lưu
                {
                    clsDMDLTC tc = new clsDMDLTC(cap);
                    tc.OnAction += new clsDMDLTC.OnActionHandler(tc_OnAction);
                    tc.OnError += new clsDMDLTC.OnErrorHandler(tc_OnError);
                    tc.Update(dr);

                    frmMain.sEdittingFormName = frmMain.sEdittingFormName.Replace(this.Name, "");
                    load_gcDonVi_DataSource();
                }
            }
        }
        #endregion ================================================================================


        #region SUB AND FUNCTION ==================================================================
        #region clsDMDLCT1 event --------------------------------------------
        private void tc_OnAction(SqlException e)
        {
            if (e.Message.Contains("The DELETE statement conflicted with the REFERENCE constraint"))
            {
                XtraMessageBox.Show("Chưa thể xóa thông tin thế chấp của đại lý này, vì còn có dữ liệu liên quan", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else tc_OnError(e);
        }

        private void tc_OnError(Exception e)
        {
            XtraMessageBox.Show("Một lỗi chưa được xử lý đã xảy ra. Chi tiết lỗi: \n" + e.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            this.Close();
        }
        #endregion ---------------------------------------------------------


        /// <summary>
        /// Nạp dữ liệu cho gv
        /// </summary>
        private void load_gcDonVi_DataSource()
        {
            //Cap 1:
            //CB.ID, CB.Ma_DT AS MaCB, CB.Ten_DT AS TenDL, SDT, DMCHUCVU.Ma_DT AS MaCV, Ma_DMDonVi as MaDV, Tien, SoPhieuThu,
            //SoHD, NgayHD, Noi_O, NgayNopTC, NgayRutTC, Thanh_Ly, Ngay_ThanhLy, isKT

            //Cap 2:
            //HD.ID , Ma_DMDonVi as MaDV, HD.DMCanBoID as MaCB, HD.Ma_DaiLy as MaDL, Ten_DaiLy AS TenDL, HD.Noi_O, HD.Ma_DT as SoHD
            //, Ngay_HD as NgayHD, NgayNopTC, SoPhieuThu, So_Tien AS Tien, NgayRutTC, Thanh_Ly, HD.Ngay_ThanhLy, isKT

            clsDMDLTC tc = new clsDMDLTC(cap);
            tc.OnAction += new clsDMDLTC.OnActionHandler(tc_OnAction);
            tc.OnError += new clsDMDLTC.OnErrorHandler(tc_OnError);
            gcDonVi.DataSource = tc.loadData(chkKhoiPhuc.Checked, rgThanhly.SelectedIndex);
        }

        private void enableControlForAddNew(bool enabled)
        {
            if (enabled) sbtnRefresh.Tag = "";
            else sbtnRefresh.Tag = "AddNew";

            sbtnRefresh.Enabled = enabled;
            sbtnXoa.Enabled = enabled;
            sbtnLoc.Enabled = enabled;
            sbtnIn.Enabled = enabled;
            chkKhoiPhuc.Enabled = enabled;
        }

        private bool RecordIsOK(DataRow dr)
        {
            bool ok = true;
            string msg = "";

            clsDMDLTC tc = new clsDMDLTC(cap);
            tc.OnAction += new clsDMDLTC.OnActionHandler(tc_OnAction);
            tc.OnError += new clsDMDLTC.OnErrorHandler(tc_OnError);

            //KIỂM TRA SỐ PHIẾU THU
            if (dr["SoPhieuThu"].ToString().Trim() != "")
                if (tc.checkSoPhieuThu(dr["SoPhieuThu"].ToString().Trim(), (int)dr["ID"])==false)  //Kiểm tra xem mã có bị trùng mã hay không
                {
                    ok = false;
                    msg = "SỐ PHIẾU THU nhập vào đã có trong hệ thống, vui lòng chọn số khác.";
                    gvDonVi.SetColumnError(gcolSoPhieuThu, msg);
                }

            //KIỂM TRA NGÀY RÚT THẾ CHẤP
            //Ngày rút thế chấp phải >= ngày thanh lý
            if (dr["NgayRutTC"] != DBNull.Value)
            {
                DateTime NgayRutTC = (DateTime)dr["NgayRutTC"];
                DateTime NgayThanhLy = (DateTime)dr["Ngay_ThanhLy"];
                if (NgayRutTC.Date < NgayThanhLy.Date)
                {
                    ok = false;
                    msg = "NGÀY RÚT THẾ CHẤP nhập vào không hợp lệ.";
                    gvDonVi.SetColumnError(gcolNgayRutTC, msg);
                }
            }

            //KIỂM TRA NGÀY KẾT THÚC TÍNH LÃI
            //Ngày kết thúc tính lãi phải >= ngày rút thế chấp và >= ngày hẹn rút
            if (dr["NgayKTTL"] != DBNull.Value)
            {
                DateTime NgayKTTL = (DateTime)dr["NgayKTTL"];
                DateTime NgayHenRut = (DateTime)dr["NgayHenRutTC"];
                DateTime NgayRutTC = (DateTime)dr["NgayRutTC"];
                if (NgayKTTL.Date < NgayHenRut.Date || NgayKTTL < NgayRutTC)
                {
                    ok = false;
                    msg = "NGÀY KẾT THÚC nhập vào không hợp lệ.";
                    gvDonVi.SetColumnError(gcolNgayKTTL, msg);
                }
            }

            return ok;
        }

        public void loadLueChucVu() //Nạp dữ liệu cho lueChucVu
        {
            lueChucVu.DataSource = clsCommon.FillData("select Ma_DT AS MaCV, Ten_DT AS TenCV from DMCHUCVU where isPublic = 1");
        }
        #endregion ================================================================================


        #region Các thủ tục khác ==================================================================
        private void chkKhoiPhuc_CheckedChanged(object sender, EventArgs e)
        {
            if (chkKhoiPhuc.Checked) gvDonVi.OptionsBehavior.Editable = false;
            else gvDonVi.OptionsBehavior.Editable = cbtnSua.Checked;

            load_gcDonVi_DataSource();
        }

        private void rpChitiet_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            if (cap == 1)
            {
                int DMCanBoID = (int)gvDonVi.GetFocusedDataRow()["ID"];
                decimal tiengoc = (decimal)clsCommon.Parse(gvDonVi.GetFocusedDataRow()["Tien"].ToString(), 3);

                DateTime ngaytl = new DateTime();
                DateTime ngayrut = new DateTime();
                DateTime ngaytlkytiep = new DateTime();
                DateTime ngaykttl = new DateTime();

                if (gvDonVi.GetFocusedDataRow()["Ngay_ThanhLy"] != DBNull.Value)
                    ngaytl = (DateTime)gvDonVi.GetFocusedDataRow()["Ngay_ThanhLy"];

                if (gvDonVi.GetFocusedDataRow()["NgayRutTC"] != DBNull.Value)
                    ngayrut = (DateTime)gvDonVi.GetFocusedDataRow()["NgayRutTC"];

                if (gvDonVi.GetFocusedDataRow()["NgayTLKyTiep"] != DBNull.Value)
                    ngaytlkytiep = (DateTime)gvDonVi.GetFocusedDataRow()["NgayTLKyTiep"];

                if (gvDonVi.GetFocusedDataRow()["NgayKTTL"] != DBNull.Value)
                    ngaykttl = (DateTime)gvDonVi.GetFocusedDataRow()["NgayKTTL"];

                frmTLChitiet frm = new frmTLChitiet(DMCanBoID, tiengoc, cap, ngaytl, ngayrut, ngaytlkytiep, ngaykttl);
                frm.ShowDialog();
            }
            else
            {
                int DMCanBoID = (int)gvDonVi.GetFocusedDataRow()["DMCanBoID"];
                int HopDongID = (int)gvDonVi.GetFocusedDataRow()["ID"];
                decimal tiengoc = (decimal)clsCommon.Parse(gvDonVi.GetFocusedDataRow()["Tien"].ToString(), 3);

                DateTime ngaytl = new DateTime();
                DateTime ngayrut = new DateTime();
                DateTime ngaytlkytiep = new DateTime();
                DateTime ngaykttl = new DateTime();

                if (gvDonVi.GetFocusedDataRow()["Ngay_ThanhLy"] != DBNull.Value)
                    ngaytl = (DateTime)gvDonVi.GetFocusedDataRow()["Ngay_ThanhLy"];

                if (gvDonVi.GetFocusedDataRow()["NgayRutTC"] != DBNull.Value)
                    ngayrut = (DateTime)gvDonVi.GetFocusedDataRow()["NgayRutTC"];

                if (gvDonVi.GetFocusedDataRow()["NgayTLKyTiep"] != DBNull.Value)
                    ngayrut = (DateTime)gvDonVi.GetFocusedDataRow()["NgayTLKyTiep"];

                if (gvDonVi.GetFocusedDataRow()["NgayKTTL"] != DBNull.Value)
                    ngaykttl = (DateTime)gvDonVi.GetFocusedDataRow()["NgayKTTL"];

                frmTLChitiet frm = new frmTLChitiet(DMCanBoID, tiengoc, cap, ngaytl, ngayrut, ngaytlkytiep, ngaykttl, HopDongID);
                frm.ShowDialog();
            }
        }

        private void rgThanhly_SelectedIndexChanged(object sender, EventArgs e)
        {
            load_gcDonVi_DataSource();
        }

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Escape)
            {
                frmMain.sEdittingFormName = frmMain.sEdittingFormName.Replace(this.Name, "");
                frmMain.sEdittingFormName += this.Name;
            }

            return base.ProcessCmdKey(ref msg, keyData);
        }

        private void riceKT_CheckedChanged(object sender, EventArgs e)
        {
            string sql;
            if (cap == 1) sql = "UPDATE LAIXUAT_CB SET isKT=@isKT WHERE DMCanBoID=@ID";
            else sql = "UPDATE LAIXUAT_DL SET isKT=@isKT WHERE HopDongID=@ID";

            bool isThanhLy = (bool)gvDonVi.GetFocusedRowCellValue(gcolThanhLy);
            if (isThanhLy)
            {
                SqlConnection conn = new SqlConnection(BienTc.connString);
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("@ID", gvDonVi.GetFocusedRowCellValue("ID"));

                object obj = gvDonVi.GetFocusedRowCellValue(gcolNgayTLKyTiep);
                bool isKT = (bool)gvDonVi.GetFocusedRowCellValue(gcolKT);
                if (isKT)
                {
                    gvDonVi.SetFocusedRowCellValue(gcolKT, false);
                    gvDonVi.SetFocusedRowCellValue(gcolNgayKTTL, null);
                    cmd.Parameters.AddWithValue("@isKT", 0);
                }
                else
                {
                    gvDonVi.SetFocusedRowCellValue(gcolKT, true);
                    gvDonVi.SetFocusedRowCellValue(gcolNgayKTTL, obj);
                    cmd.Parameters.AddWithValue("@isKT", 1);
                }

                int i = cmd.ExecuteNonQuery();
            }
            else
            {
                gvDonVi.SetFocusedRowCellValue(gcolKT, false);
                gvDonVi.SetFocusedRowCellValue(gcolNgayKTTL, null);
            }
        }
        #endregion ================================================================================
    }
}